The emerging field of byte-addressable, Non-Volatile Memory (NVM) technology unveils a new area for researchers in both computer architecture and software design. Storage Class Memory (SCM) is a group of new technologies that include but is not limited to Phase Change Memory (PCM), battery backed DRAM, Magnetoresistive Random Access Memory, Spin-Transfer Torque Random Access Memory, Flash-backed DRAM, Resistive Random Access Memory, and other memristor based technologies. PCM shows promise in that it can achieve a high chip density and speed. These properties will enable the creation of systems with large amounts of persistent, byte-addressable memory that can replace slow, block based Flash or hard disk drives.
Storage Class Memory (SCM) promises a persistent, high-speed, byte-addressable memory that can reside alongside DRAM on the main memory bus. The byte-addressable nature of SCM combined with persistence, give rise to a new breed of approaches to persistence that no longer have to write data in a slow, block addressed manner to a backend data store such as a hard drive or Flash. Additionally, legacy applications can take advantage of SCM to achieve better performance. Advances in database technology such as graph-based and main-memory databases that utilize in-memory data structures are perfect examples of software applications that will benefit from SCM. These software applications must continue to provide varying levels of transactional support to users.
New Main-Memory DataBases (MMDB) such as CSQL and VoltDB and graph databases such as Neo4j and SAP HANA require low latency and are read intensive. They often have low locality and random reference patterns. These types of software applications can take advantage of high density, low-latency, byte-addressable, persistent memory attached to the main memory bus. The different transactional methods that each database provides can reside on top of a byte-addressed, persistent memory rather than a slow, block based storage device.
In order to ensure the atomicity and durability of in-memory, persistent data structures, a mechanism is needed by which writing data to SCM is performed in an atomic and serialized manner. Just writing data to memory locations might have data being caught in the cache hierarchy. Flushing data or stream a store to persistent memory will add data to a write queue in the memory controller, but the data still has no guarantee of being written to persistent memory. A fence instruction might help, but groups of stores still run into the same problem, in that some of the stores might progress all the way to persistent memory while others do not, making the system subject to failure during a system crash. Guaranteeing transactional execution while exploiting the cache hierarchy is not straightforward.
Recent research areas also show that processing triple-store, Resource Description Framework (RDF) data in PCM is much faster than flash or disk based methods. Whole-system persistence (WSP) methods allow for in memory databases, but utilize a flush-on-fail and not-flush-on-commit strategy that relies on batteries to power persistent memories on system failure.
Research in persistent file systems built on SCM is also a promising area that might quickly enable software applications to take advantage of SCM. Storage Class Memory File System (SCMFS) uses sequences of memory fence and cache-line-flush operations to perform ordering and flushing of load and store instructions and requires garbage collection. BPFS uses copy on write techniques along with hardware changes to provide atomic updates to persistent storage. However, these methods require synchronous copy-on-write and synchronous logging methods.
Research into new data structures such as in NV-heaps, which use logging and copying, show support of ACID components in software applications using SCM. Consistent and Durable Data Structures (CDDS) provides a versioning method that copies data and uses sequences of fences and flushes to provide transaction support. Mnemosyne provides several primitives for persistent variable support and has a transaction mechanism, which supports ACID options, but also relies on a log and write-through stores, fences, and flushes.
BPFS and NV-heaps require changes to the system architecture to support the atomicity and consistency of data. These changes are significant since they are up front, such as cache line counters and tags.